﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;

//namespace GoldenTuney.Zone
//{

//    public struct ZoneScheme
//        {
//            List<int> zone_default;
//            List<bool> zone_default_is_pct;
//            List<string> zone_default_name;
//            List<string> zone_default_desc;
//            int nzones_default;
//        };

//    public class Zones
//    {
        
//        struct ZoneInfo {
//        string name, desc;
//        int lo, hi;
//        ZoneInfo(  string n,   string d, int l, int h) {
//            name = n;
//            desc = d;
//            lo=l;
//            hi=h;
//    }
        

//    // used by qSort()
//    public static bool operator < (ZoneInfo left,ZoneInfo right)   {
//        return ((left.lo < right.lo) || ((left.lo == right.lo)  (left.hi < right.hi)));
//    }
//};

//               // A zone "range" defines the power zones
//// that are active for a specific date period
//// e.g. between 01/01/2008 and 01/04/2008
////      my CP was 290 and I chose to setup
////      7 zoneinfos from Active Recovery through
////      to muscular Endurance
//public struct ZoneRange {
//    DateTime begin, end;
//    public int cp;
//    List<ZoneInfo> zones = new List<ZoneInfo>();
//    bool zonesSetFromCP;

//    ZoneRange(  DateTime b,   DateTime e) {
//        begin = b;
//        end=e;
//        cp=0;
//        zonesSetFromCP=false;
//    } 
  
//    ZoneRange(  DateTime b,   DateTime e, int _cp) {
//        begin=b; end=e;cp=_cp; zonesSetFromCP=false; 
//    }

//    // used by qSort()
//    //bool operator< (ZoneRange left,ZoneRange right)   {
//    //    return (((! right.begin.isNull()) 
//    //            (left.begin.isNull() || begin < right.begin )) ||
//    //            ((left.begin == right.begin)  (! left.end.isNull()) 
//    //            ( right.end.isNull() || end < right.end )));
//    }
//};

//    class Zones  
//{
     

    

//        // Scheme
//        bool defaults_from_user;
//        ZoneScheme scheme;

//        // CP History
//        List<ZoneRange> ranges;

//        // utility
//        string err, warning;
//        void setZonesFromCP(ZoneRange range);

    

//        //Zones() : this.defaults_from_user(false) {
//        //        initia.lizeZoneParameters();
//        //}

//        //
//        // Zone settings - Scheme ( default scheme)
//        //
//        ZoneScheme getScheme()   { return scheme; }
//        void setScheme(ZoneScheme x) { scheme = x; }

//        // get defaults from the current scheme
//        string getDefaultZoneName(int z)  ;
//        string getDefaultZoneDesc(int z)  ;

//        // set zone parameters to either user-specified defaults
//        // or to defaults using Coggan's coefficients
//        void initializeZoneParameters();

//        //
//        // Zone history - Ranges
//        //
//        // How many ranges in our history
//        int getRangeSize()  ;

//        // Add ranges
//        void addZoneRange(DateTime _start, DateTime _end, int _cp);
//        int addZoneRange(DateTime _start, int _cp);
//        void addZoneRange();

//        // insert a range from the given date to the end date of the range
//        // presently including the date
//        int insertRangeAtDate(DateTime date, int cp = 0);

//        // Get / Set ZoneRange details
//        ZoneRange getZoneRange(int rnum) { return ranges[rnum]; }
//        void setZoneRange(int rnum, ZoneRange x) { ranges[rnum] = x; }

//        // get and set CP for a given range
//        int getCP(int rnum)  {
//            //assert(rnum < ranges.size());
//            return ranges[rnum].cp;
//            }

//        void setCP(int rnum, int cp){
//            ZoneRange tmp = ranges[rnum] ;
//            tmp.cp = cp;
//            ranges[rnum] =tmp;

//             modificationTime = DateTime.Now;
//        }

//        // calculate and then set zoneinfo for a given range
//        void setZonesFromCP(int rnum);

//        // delete the range rnum, and adjust dates on adjacent zone; return
//        // the range number of the range extended to cover the deleted zone
//        int deleteRange(  int rnum);

//        //
//        // read and write power.zones
//        //
//        //Todo
//        //bool read(QFile file);
//        //void write(QDir home);
//         string errorString()   { return err; }
//         string warningString()   { return warning; }


//        //
//        // Typical APIs to get details of ranges and zones
//        //

//        // which range is active for a particular date
//        int whichRange(  DateTime date)  ;

//        // which zone is the power value in for a given range
//        int whichZone(int range, double value)  ;

//        // how many zones are there for a given range
//        int numZones(int range)  ;

//        // get zoneinfo  for a given range and zone
//        void zoneInfo(int range, int zone,
//                      string name, string description,
//                      int low, int high) ;

//        string summarize(int rnum, List<double> time_in_zone) ;

//        // get all highs/lows for zones (plot shading uses these)
//        int lowsFromCP(List <int> lows, int CP) ;
//        List <int> getZoneLows(int rnum) ;
//        List <int> getZoneHighs(int rnum) ;
//        List <string> getZoneNames(int rnum) ;

//        // get/set range start and end date
//        DateTime getStartDate(int rnum) ;
//        DateTime getEndDate(int rnum) ;
//        string getStartDateString(int rnum) ;
//        string getEndDateString(int rnum) ;
//        void setEndDate(int rnum, DateTime date);
//        void setStartDate(int rnum, DateTime date);

//        // When was this last updated?
//        DateTime modificationTime;

//        // calculate a CRC for the zones data - used to see if zones
//        // data is changed since last referenced in Metric code
//        // could also be used in Configuration pages (later)
//        UInt64 getFingerprint() ;
//};




    
 


//    }
//}